package com.atg.atgchat.init.websocket.model.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.Arrays;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;

/*
author: atg
time: 2025/1/12 10:34
*/
@Getter
@AllArgsConstructor // 自动生成构造方法
public enum WebSocketRequestTypeEnum {
    LOGIN(1, "请求登录二维码"), //登录
    HEART_BEAT(2, "心跳包"), //心跳
    AUTHORIZE(3, "登录认证"), // 登录认证
    ;

    private Integer type;
    private String desc;

    private static Map<Integer, WebSocketRequestTypeEnum> cache;

    static {
//        使用Arrays.stream()：将枚举类中的所有枚举值转换为一个流（Stream），然后使用collect()方法将流转换为Map。
//        这种转换通常用于需要快速查找枚举值的情况。通过将枚举值映射到一个Map中，可以在常数时间内通过类型查找对应的枚举值，从而提高代码的效率和可读性
        cache = Arrays.stream(WebSocketRequestTypeEnum.values()).collect(Collectors.toMap(WebSocketRequestTypeEnum::getType, Function.identity()));
    }
    // 根据type获取枚举值
    public static WebSocketRequestTypeEnum of(Integer type) {
        return cache.get(type);
    }

}
